package com.ruoyi.system.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.MiniSubject;
import com.ruoyi.system.domain.MiniSubjectHistory;
import com.ruoyi.system.domain.MiniUser;
import com.ruoyi.system.domain.dto.SubjectImportDTO;
import com.ruoyi.system.domain.vo.h5.MainSubjectVO;
import org.apache.ibatis.annotations.Param;

/**
 * 题材Mapper接口
 * 
 * @author ruoyi
 * @date 2023-11-01
 */
public interface MiniSubjectMapper extends BaseMapper<MiniSubject>
{
    /**
     * 查询题材
     * 
     * @param subjectId 题材主键
     * @return 题材
     */
    public MiniSubject selectMiniSubjectBySubjectId(Long subjectId);

    /**
     * 查询题材列表
     * 
     * @param miniSubject 题材
     * @return 题材集合
     */
    public List<MiniSubject> selectMiniSubjectList(MiniSubject miniSubject);

    /**
     * 新增题材
     * 
     * @param miniSubject 题材
     * @return 结果
     */
    public int insertMiniSubject(MiniSubject miniSubject);

    /**
     * 修改题材
     * 
     * @param miniSubject 题材
     * @return 结果
     */
    public int updateMiniSubject(MiniSubject miniSubject);

    /**
     * 删除题材
     * 
     * @param subjectId 题材主键
     * @return 结果
     */
    public int deleteMiniSubjectBySubjectId(Long subjectId);

    /**
     * 批量删除题材
     * 
     * @param subjectIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMiniSubjectBySubjectIds(Long[] subjectIds);
    /**
     * 校验题材名称是否唯一
     *
     * @param name 题材名称
     * @param parentId 父题材ID
     * @return 结果
     */
    MiniSubject checkSubjectNameUnique(@Param("name") String name, @Param("parentId") Long parentId);

    /**
     * 根据ID查询所有子题材（正常状态）
     *
     * @param subjectId 题材ID
     * @return 子题材数
     */
    int selectNormalChildrenSubjectById(Long subjectId);

    /**
     * 是否存在子节点
     *
     * @param subjectId 部门ID
     * @return 结果
     */
    int hasChildBySubjectId(Long subjectId);

    /**
     * 通过id列表查询题材
     *
     * @param subjectIds
     * @param level
     * @return
     */
    List<MiniSubject> selectMiniSubjectBySubjectIdList(@Param("list") List<Long> subjectIds,@Param("level") int level);

    /**
     * 批量更新涨幅
     *
     * @param updateSubjectList
     */
    void batchUpdateRate(@Param("list") List<MiniSubject> updateSubjectList);

    /**
     * 把题材所有的涨幅度都更新为0
     */
    void updateAllRateZero();

    /**
     * 获取上一层的涨幅度
     *
     * @param level
     * @return
     */
    List<MiniSubject> getParentRate(int level);

    /**
     * 题材轮动数据获取
     * @return
     */
    List<MiniSubjectHistory> selectSubjectHistory();

    List<MiniSubjectHistory> getParentRateMoneyInflow(int level);

    List<MainSubjectVO> mainSubject();

    List<MiniSubject> selectSubjectOneAndFour(List<SubjectImportDTO> list);
}
